package com.example.study.jetpack.compose

import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.Image
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout

/**
 *  created by ws
 *   on 2022/3/1
 *   describe:
 */
class Compose旧笔记 {
}




/*
class MainActivity : ComponentActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            //photographer()
            val mutableListOf = mutableListOf<String>("1", "2", "3")
            Conversation(messages = mutableListOf)
            //MessageCardTheme()
            */
/*AndroidComposeTheme {
                // A surface container using the 'background' color from the theme
                Surface(color = MaterialTheme.colors.background) {
                    Greeting("Android")
                }
            }*//*

        }
    }
}

@Composable
fun ConstraintlayoutDemo(){
    ConstraintLayout {
        //初始化声明两个元素id,如果只声明一个,则可用createRef()方法
        //这里声明的类似于view的 id
        val (button,text) = createRefs()
        Button(onClick = { },
            //constrainS()将Composable组件与初始化的引用关联起来
            //关联之后就可以在其他组件中使用并添加约束
            Modifier.constrainAs(button){
                top.linkTo(parent.top,margin = 20.dp)
                start.linkTo(parent.start,margin = 10.dp)
                //width = Dimension.wrapContent
            }
        ) {
            Text(text = "asdws")
        }
        Text(text = "zxcwx", Modifier.constrainAs(text) {
            top.linkTo(button.bottom,margin = 16.dp)
            start.linkTo(button.start)
            centerHorizontallyTo(parent) //摆放在constraintLayout 水平中间
            //如果需要放在整个屏幕中间就需要在constraintLayout中设置Modifier.fillMaxWidth()即可
        })
        //barrier 给子元素设置栅栏
        val createEndBarrier = createEndBarrier(button, text)
        //start.linkTo(createEndBarrier)
        */
/**
         * 创建栅栏的函数
         * createTopBarrier (top ,bottom,strart,end,absoulteleft,absoluteright)*//*


        //width = Dimension.wrapContent  //只根据内容 不受约束 自适应
        //width = Dimension.preferredWrapContent //布局大小是根据内容设置的 并受约束布局影响
        // width = Dimension.fillToConstraints // 布局大小将展开填充由布局约束所限制的控件.也就是说在这个属
        // 性是先看布局约束限制的空间有多大,然后再将该子元素填充到这个有约束的空间中
        // width = Dimension.preferredValue() //布局大小是一个固定的值 并收布局约束影响
        //width = Dimension.value()//布局大小是一个固定的值 且不受约束影响
        //width = Dimension.preferredWrapContent.atLeast() 可设置最小布局大小.atMost可设置最大布局大小

        //chain链 横向 纵向 链
        //createHorizontalChain(),createVerticalChain()

        //第一个参数是需要打包在一起的所有子元素id,第二个参数是链的类型,目前有三种类型
        //1.Spread: 所有的子元素平均分布在父布局空间中,是默认类型
        //2.SpreadInside:第一个和最后一个分布在链条的两端,其余子元素平均分布剩下的空间
        //Packed:所有子元素打包在一起,并放在链条中间
    }
}

//在compsition树中共享变量的值
val ActiveUser = compositionLocalOf {
    "asdws"
}

@Composable
fun photographer(){
    Column() {
        val current = ActiveUser.current //通过current 取值
        Text(text = current)
        Log.d("asdws", " "+ActiveUser.current)
        CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
            Log.d("asdws", " "+ActiveUser.current)
        }
        //通过 Provides 中缀表达式可以重新对ConpositionLocal实例赋值
        CompositionLocalProvider( ActiveUser provides "zxcwx") {
            Log.d("asdws", " "+ActiveUser.current)
        }
        Log.d("asdws", " "+ActiveUser.current)
        CompositionLocalProvider( ActiveUser provides "1234") {
            Log.d("asdws", " "+ActiveUser.current)
        }
        Log.d("asdws", " "+ActiveUser.current)
    }
}
@Composable
fun Conversation(messages:List<String>){
    //remember 可将状态存储在内存中 ，并跟踪传递给mutableStateOf的值得变化。
    //该值更新时 系统会自动充更新绘制使用的组合项，称为重组
    var isExpanded by remember {
        mutableStateOf(false)
    }
    //只会呈现屏幕上显示的元素
    LazyColumn{
        items(messages){
            MessageCard()
        }
    }
}

@Preview
@Composable
fun MessageCardTheme(){
    //主题在theme 文件中定义
    Column {
        MessageCard()
        AndroidComposeTheme {
            MessageCard()
        }
    }

}
@Preview  //如果需要预览 添加该注解
@Composable  //定义可组合函数注解
fun MessageCard(){
    //跟踪信息是否在此扩展
    //remember将值存储起来 当界面发送重新绘制就会读取之前的值
    // （为了抽取到class外时，不依赖类变量而实现功能）
    var isExpanded by remember {
        //mutableStateOf  表明数据有状态，如果状态发生改变
        // 引用这个状态的控件都发生了改变，会重新绘制
        mutableStateOf(false)
    }

    //column 函数可以垂直排列元素
    //row 可以水平排列元素
    //box堆叠元素
    Column(
        Modifier.clickable {
            isExpanded = !isExpanded
        }
    ) {
        Text(
            text = if (isExpanded)"asdws" else "click",
            color = MaterialTheme.colors.secondaryVariant,
            //文字样式
            style = MaterialTheme.typography.body2
        )
        //颜色过度
        val surfaceColor: Color by animateColorAsState(

            if (isExpanded) MaterialTheme.colors.primary else MaterialTheme.colors.surface,
        )

        //高度？
        Surface(
            shape = MaterialTheme.shapes.medium,
            elevation = 1.dp,
            //过度动画
            modifier = Modifier.animateContentSize().padding(1.dp)
        ) {
            Text(text = "123456",
                //内边距
                Modifier.padding(all = 4.dp),
                style = MaterialTheme.typography.subtitle2)
        }

        Row(Modifier.padding(all = 8.dp)) {
            Image(
                painter = painterResource(id = R.drawable.ic_launcher_background),
                contentDescription = "无障碍模式下显示的内容",
                //图片size 为40 设为圆形
                modifier = Modifier
                    .size(40.dp)
                    //圆形
                    .clip(CircleShape)
                    //边框
                    .border(1.5.dp, MaterialTheme.colors.secondary, CircleShape)
            )
            //添加一个水平空间
            Spacer(modifier = Modifier
                .height(4.dp)
                .width(20.dp))
            Text(text = "图片")
        }

    }

}

@Composable
fun Greeting(name: String) {
    Text(text = "Hello $name!")
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    AndroidComposeTheme {
        Greeting("Android")
    }
}*/
